-
Notifications
You must be signed in to change notification settings - Fork 78
Replace FragmentedMapper with TwoLevelMmapper #1337
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
This is a replacement for `FragmentedMapper`. It does not use hash tables and is lock-free when looking up or lazily initializing the slabs table. It is intended to eliminate the pathological case of `FragmentedMapper` where a hash collision can result in many locking operations to find the matching or vacant slab table entry.
FragmentedMapper was FragmentedMmapper in JikesRVM. FragmentedMapper may be a misnomer introduced when porting it to Rust.
The hash table design should have been a mistake. Now that we are going to replace it, we replace it completely.
x86_64 actualy has 47 bit address space for the user.
The current implememntation only has two levels. We leave the name "MultiLevelMmapper" to a true multi-level implementation in the future.
This PR is intended as a quick fix for the pathological case of |
DRAFT:
This PR replaces
FragmentedMapper
withTwoLevelMmapper
.TwoLevelMmapper
does not use hash tables. It is also lock-free when looking upMapState
entries, and also lock-free when lazily initializing slabs. It is intended to eliminate the pathological case ofFragmentedMapper
where a hash collision can result in a long-distance linear scan and many locking operations.Fixes: #1336